package com.dao;

import java.util.List;
import java.util.ArrayList;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteStatement;

import de.greenrobot.dao.AbstractDao;
import de.greenrobot.dao.Property;
import de.greenrobot.dao.internal.SqlUtils;
import de.greenrobot.dao.internal.DaoConfig;
import de.greenrobot.dao.query.Query;
import de.greenrobot.dao.query.QueryBuilder;

import com.model.Apiario;
import com.model.Apicultor;
import com.model.Exame;
import com.model.MetodosCriacao;
import com.model.Racas;

import com.model.CriaRainhas;

// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT.
/** 
 * DAO for table CRIA_RAINHAS.
*/
public class CriaRainhasDao extends AbstractDao<CriaRainhas, Long> {

    public static final String TABLENAME = "CRIA_RAINHAS";

    /**
     * Properties of entity CriaRainhas.<br/>
     * Can be used for QueryBuilder and for referencing column names.
    */
    public static class Properties {
        public final static Property Id = new Property(0, Long.class, "id", true, "_idmest");
        public final static Property CodRainha = new Property(1, String.class, "codRainha", false, "COD_RAINHA");
        public final static Property DataFecunda = new Property(2, String.class, "dataFecunda", false, "DATA_FECUNDA");
        public final static Property Compra = new Property(3, boolean.class, "compra", false, "COMPRA");
        public final static Property Avaliacao = new Property(4, String.class, "avaliacao", false, "AVALIACAO");
        public final static Property DataTroca = new Property(5, String.class, "dataTroca", false, "DATA_TROCA");
        public final static Property MarcaClipada = new Property(6, boolean.class, "marcaClipada", false, "MARCA_CLIPADA");
        public final static Property Ano = new Property(7, String.class, "ano", false, "ANO");
        public final static Property Cor = new Property(8, String.class, "cor", false, "COR");
        public final static Property Activa = new Property(9, boolean.class, "activa", false, "ACTIVA");
        public final static Property Motivo = new Property(10, String.class, "Motivo", false, "MOTIVO");
        public final static Property Obs = new Property(11, String.class, "obs", false, "OBS");
        public final static Property ApiarioDador = new Property(12, long.class, "apiarioDador", false, "APIARIO_DADOR");
        public final static Property ApiarioInicializ = new Property(13, long.class, "apiarioInicializ", false, "APIARIO_INICIALIZ");
        public final static Property ApiarioFinaliz = new Property(14, long.class, "apiarioFinaliz", false, "APIARIO_FINALIZ");
        public final static Property ApiarioFecunda = new Property(15, long.class, "apiarioFecunda", false, "APIARIO_FECUNDA");
        public final static Property Ap_final = new Property(16, long.class, "Ap_final", false, "AP_FINAL");
        public final static Property MetodCria = new Property(17, long.class, "metodCria", false, "METOD_CRIA");
        public final static Property MetodoCriaId = new Property(18, long.class, "metodoCriaId", false, "METODO_CRIA_ID");
        public final static Property RacaRainha = new Property(19, long.class, "racaRainha", false, "RACA_RAINHA");
        public final static Property ApicultorId = new Property(20, long.class, "apicultorId", false, "APICULTOR_ID");
        public final static Property CodApicultor = new Property(21, long.class, "codApicultor", false, "COD_APICULTOR");
        public final static Property ColmeiaDadora = new Property(22, long.class, "ColmeiaDadora", false, "COLMEIA_DADORA");
        public final static Property ColmeiaInicializ = new Property(23, long.class, "colmeiaInicializ", false, "COLMEIA_INICIALIZ");
        public final static Property ColmeiaFinaliz = new Property(24, long.class, "colmeiaFinaliz", false, "COLMEIA_FINALIZ");
        public final static Property ColmeiaFecunda = new Property(25, long.class, "colmeiaFecunda", false, "COLMEIA_FECUNDA");
        public final static Property ColmeiaFinal = new Property(26, long.class, "ColmeiaFinal", false, "COLMEIA_FINAL");
    };

    private DaoSession daoSession;

    private Query<CriaRainhas> apiario_ApiDadorCriaRainhasQuery;
    private Query<CriaRainhas> apiario_ApiIniCriaRainhasQuery;
    private Query<CriaRainhas> apiario_ApiFinaCriaRainhasQuery;
    private Query<CriaRainhas> apiario_ApiFcunCriaRainhasQuery;
    private Query<CriaRainhas> apiario_ApiFinalCriaRainhasQuery;
    private Query<CriaRainhas> metodosCriacao_MetodoCriaCriaRainhasQuery;
    private Query<CriaRainhas> racas_RacaCriaRainhasQuery;
    private Query<CriaRainhas> apicultor_ApicultorCriaRainhasQuery;
    private Query<CriaRainhas> apiario_ExameDadorCriaRainhasQuery;
    private Query<CriaRainhas> exame_ExameIniCriaRainhasQuery;
    private Query<CriaRainhas> exame_ExameFinaCriaRainhasQuery;
    private Query<CriaRainhas> exame_ExameFcunCriaRainhasQuery;
    private Query<CriaRainhas> exame_ExameFinalCriaRainhasQuery;

    public CriaRainhasDao(DaoConfig config) {
        super(config);
    }
    
    public CriaRainhasDao(DaoConfig config, DaoSession daoSession) {
        super(config, daoSession);
        this.daoSession = daoSession;
    }

    /** Creates the underlying database table. */
    public static void createTable(SQLiteDatabase db, boolean ifNotExists) {
        String constraint = ifNotExists? "IF NOT EXISTS ": "";
        db.execSQL("CREATE TABLE " + constraint + "'CRIA_RAINHAS' (" + //
                "'_idmest' INTEGER PRIMARY KEY ASC AUTOINCREMENT ," + // 0: id
                "'COD_RAINHA' TEXT NOT NULL ," + // 1: codRainha
                "'DATA_FECUNDA' TEXT NOT NULL ," + // 2: dataFecunda
                "'COMPRA' INTEGER NOT NULL ," + // 3: compra
                "'AVALIACAO' TEXT NOT NULL ," + // 4: avaliacao
                "'DATA_TROCA' TEXT NOT NULL ," + // 5: dataTroca
                "'MARCA_CLIPADA' INTEGER NOT NULL ," + // 6: marcaClipada
                "'ANO' TEXT NOT NULL ," + // 7: ano
                "'COR' TEXT," + // 8: cor
                "'ACTIVA' INTEGER NOT NULL ," + // 9: activa
                "'MOTIVO' TEXT," + // 10: Motivo
                "'OBS' TEXT," + // 11: obs
                "'APIARIO_DADOR' INTEGER NOT NULL ," + // 12: apiarioDador
                "'APIARIO_INICIALIZ' INTEGER NOT NULL ," + // 13: apiarioInicializ
                "'APIARIO_FINALIZ' INTEGER NOT NULL ," + // 14: apiarioFinaliz
                "'APIARIO_FECUNDA' INTEGER NOT NULL ," + // 15: apiarioFecunda
                "'AP_FINAL' INTEGER NOT NULL ," + // 16: Ap_final
                "'METOD_CRIA' INTEGER NOT NULL ," + // 17: metodCria
                "'METODO_CRIA_ID' INTEGER NOT NULL ," + // 18: metodoCriaId
                "'RACA_RAINHA' INTEGER NOT NULL ," + // 19: racaRainha
                "'APICULTOR_ID' INTEGER NOT NULL ," + // 20: apicultorId
                "'COD_APICULTOR' INTEGER NOT NULL ," + // 21: codApicultor
                "'COLMEIA_DADORA' INTEGER NOT NULL ," + // 22: ColmeiaDadora
                "'COLMEIA_INICIALIZ' INTEGER NOT NULL ," + // 23: colmeiaInicializ
                "'COLMEIA_FINALIZ' INTEGER NOT NULL ," + // 24: colmeiaFinaliz
                "'COLMEIA_FECUNDA' INTEGER NOT NULL ," + // 25: colmeiaFecunda
                "'COLMEIA_FINAL' INTEGER NOT NULL );"); // 26: ColmeiaFinal
    }

    /** Drops the underlying database table. */
    public static void dropTable(SQLiteDatabase db, boolean ifExists) {
        String sql = "DROP TABLE " + (ifExists ? "IF EXISTS " : "") + "'CRIA_RAINHAS'";
        db.execSQL(sql);
    }

    /** @inheritdoc */
    @Override
    protected void bindValues(SQLiteStatement stmt, CriaRainhas entity) {
        stmt.clearBindings();
 
        Long id = entity.getId();
        if (id != null) {
            stmt.bindLong(1, id);
        }
        stmt.bindString(2, entity.getCodRainha());
        stmt.bindString(3, entity.getDataFecunda());
        stmt.bindLong(4, entity.getCompra() ? 1l: 0l);
        stmt.bindString(5, entity.getAvaliacao());
        stmt.bindString(6, entity.getDataTroca());
        stmt.bindLong(7, entity.getMarcaClipada() ? 1l: 0l);
        stmt.bindString(8, entity.getAno());
 
        String cor = entity.getCor();
        if (cor != null) {
            stmt.bindString(9, cor);
        }
        stmt.bindLong(10, entity.getActiva() ? 1l: 0l);
 
        String Motivo = entity.getMotivo();
        if (Motivo != null) {
            stmt.bindString(11, Motivo);
        }
 
        String obs = entity.getObs();
        if (obs != null) {
            stmt.bindString(12, obs);
        }
        stmt.bindLong(13, entity.getApiarioDador());
        stmt.bindLong(14, entity.getApiarioInicializ());
        stmt.bindLong(15, entity.getApiarioFinaliz());
        stmt.bindLong(16, entity.getApiarioFecunda());
        stmt.bindLong(17, entity.getAp_final());
        stmt.bindLong(18, entity.getMetodCria());
        stmt.bindLong(19, entity.getMetodoCriaId());
        stmt.bindLong(20, entity.getRacaRainha());
        stmt.bindLong(21, entity.getApicultorId());
        stmt.bindLong(22, entity.getCodApicultor());
        stmt.bindLong(23, entity.getColmeiaDadora());
        stmt.bindLong(24, entity.getColmeiaInicializ());
        stmt.bindLong(25, entity.getColmeiaFinaliz());
        stmt.bindLong(26, entity.getColmeiaFecunda());
        stmt.bindLong(27, entity.getColmeiaFinal());
    }

    @Override
    protected void attachEntity(CriaRainhas entity) {
        super.attachEntity(entity);
        entity.__setDaoSession(daoSession);
    }

    /** @inheritdoc */
    @Override
    public Long readKey(Cursor cursor, int offset) {
        return cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0);
    }    

    /** @inheritdoc */
    @Override
    public CriaRainhas readEntity(Cursor cursor, int offset) {
        CriaRainhas entity = new CriaRainhas( //
            cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0), // id
            cursor.getString(offset + 1), // codRainha
            cursor.getString(offset + 2), // dataFecunda
            cursor.getShort(offset + 3) != 0, // compra
            cursor.getString(offset + 4), // avaliacao
            cursor.getString(offset + 5), // dataTroca
            cursor.getShort(offset + 6) != 0, // marcaClipada
            cursor.getString(offset + 7), // ano
            cursor.isNull(offset + 8) ? null : cursor.getString(offset + 8), // cor
            cursor.getShort(offset + 9) != 0, // activa
            cursor.isNull(offset + 10) ? null : cursor.getString(offset + 10), // Motivo
            cursor.isNull(offset + 11) ? null : cursor.getString(offset + 11), // obs
            cursor.getLong(offset + 12), // apiarioDador
            cursor.getLong(offset + 13), // apiarioInicializ
            cursor.getLong(offset + 14), // apiarioFinaliz
            cursor.getLong(offset + 15), // apiarioFecunda
            cursor.getLong(offset + 16), // Ap_final
            cursor.getLong(offset + 17), // metodCria
            cursor.getLong(offset + 18), // metodoCriaId
            cursor.getLong(offset + 19), // racaRainha
            cursor.getLong(offset + 20), // apicultorId
            cursor.getLong(offset + 21), // codApicultor
            cursor.getLong(offset + 22), // ColmeiaDadora
            cursor.getLong(offset + 23), // colmeiaInicializ
            cursor.getLong(offset + 24), // colmeiaFinaliz
            cursor.getLong(offset + 25), // colmeiaFecunda
            cursor.getLong(offset + 26) // ColmeiaFinal
        );
        return entity;
    }
     
    /** @inheritdoc */
    @Override
    public void readEntity(Cursor cursor, CriaRainhas entity, int offset) {
        entity.setId(cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0));
        entity.setCodRainha(cursor.getString(offset + 1));
        entity.setDataFecunda(cursor.getString(offset + 2));
        entity.setCompra(cursor.getShort(offset + 3) != 0);
        entity.setAvaliacao(cursor.getString(offset + 4));
        entity.setDataTroca(cursor.getString(offset + 5));
        entity.setMarcaClipada(cursor.getShort(offset + 6) != 0);
        entity.setAno(cursor.getString(offset + 7));
        entity.setCor(cursor.isNull(offset + 8) ? null : cursor.getString(offset + 8));
        entity.setActiva(cursor.getShort(offset + 9) != 0);
        entity.setMotivo(cursor.isNull(offset + 10) ? null : cursor.getString(offset + 10));
        entity.setObs(cursor.isNull(offset + 11) ? null : cursor.getString(offset + 11));
        entity.setApiarioDador(cursor.getLong(offset + 12));
        entity.setApiarioInicializ(cursor.getLong(offset + 13));
        entity.setApiarioFinaliz(cursor.getLong(offset + 14));
        entity.setApiarioFecunda(cursor.getLong(offset + 15));
        entity.setAp_final(cursor.getLong(offset + 16));
        entity.setMetodCria(cursor.getLong(offset + 17));
        entity.setMetodoCriaId(cursor.getLong(offset + 18));
        entity.setRacaRainha(cursor.getLong(offset + 19));
        entity.setApicultorId(cursor.getLong(offset + 20));
        entity.setCodApicultor(cursor.getLong(offset + 21));
        entity.setColmeiaDadora(cursor.getLong(offset + 22));
        entity.setColmeiaInicializ(cursor.getLong(offset + 23));
        entity.setColmeiaFinaliz(cursor.getLong(offset + 24));
        entity.setColmeiaFecunda(cursor.getLong(offset + 25));
        entity.setColmeiaFinal(cursor.getLong(offset + 26));
     }
    
    /** @inheritdoc */
    @Override
    protected Long updateKeyAfterInsert(CriaRainhas entity, long rowId) {
        entity.setId(rowId);
        return rowId;
    }
    
    /** @inheritdoc */
    @Override
    public Long getKey(CriaRainhas entity) {
        if(entity != null) {
            return entity.getId();
        } else {
            return null;
        }
    }

    /** @inheritdoc */
    @Override    
    protected boolean isEntityUpdateable() {
        return true;
    }
    
    /** Internal query to resolve the "apiDadorCriaRainhas" to-many relationship of Apiario. */
    public List<CriaRainhas> _queryApiario_ApiDadorCriaRainhas(long apiarioDador) {
        synchronized (this) {
            if (apiario_ApiDadorCriaRainhasQuery == null) {
                QueryBuilder<CriaRainhas> queryBuilder = queryBuilder();
                queryBuilder.where(Properties.ApiarioDador.eq(null));
                apiario_ApiDadorCriaRainhasQuery = queryBuilder.build();
            }
        }
        Query<CriaRainhas> query = apiario_ApiDadorCriaRainhasQuery.forCurrentThread();
        query.setParameter(0, apiarioDador);
        return query.list();
    }

    /** Internal query to resolve the "apiIniCriaRainhas" to-many relationship of Apiario. */
    public List<CriaRainhas> _queryApiario_ApiIniCriaRainhas(long apiarioInicializ) {
        synchronized (this) {
            if (apiario_ApiIniCriaRainhasQuery == null) {
                QueryBuilder<CriaRainhas> queryBuilder = queryBuilder();
                queryBuilder.where(Properties.ApiarioInicializ.eq(null));
                apiario_ApiIniCriaRainhasQuery = queryBuilder.build();
            }
        }
        Query<CriaRainhas> query = apiario_ApiIniCriaRainhasQuery.forCurrentThread();
        query.setParameter(0, apiarioInicializ);
        return query.list();
    }

    /** Internal query to resolve the "apiFinaCriaRainhas" to-many relationship of Apiario. */
    public List<CriaRainhas> _queryApiario_ApiFinaCriaRainhas(long apiarioFinaliz) {
        synchronized (this) {
            if (apiario_ApiFinaCriaRainhasQuery == null) {
                QueryBuilder<CriaRainhas> queryBuilder = queryBuilder();
                queryBuilder.where(Properties.ApiarioFinaliz.eq(null));
                apiario_ApiFinaCriaRainhasQuery = queryBuilder.build();
            }
        }
        Query<CriaRainhas> query = apiario_ApiFinaCriaRainhasQuery.forCurrentThread();
        query.setParameter(0, apiarioFinaliz);
        return query.list();
    }

    /** Internal query to resolve the "apiFcunCriaRainhas" to-many relationship of Apiario. */
    public List<CriaRainhas> _queryApiario_ApiFcunCriaRainhas(long apiarioFecunda) {
        synchronized (this) {
            if (apiario_ApiFcunCriaRainhasQuery == null) {
                QueryBuilder<CriaRainhas> queryBuilder = queryBuilder();
                queryBuilder.where(Properties.ApiarioFecunda.eq(null));
                apiario_ApiFcunCriaRainhasQuery = queryBuilder.build();
            }
        }
        Query<CriaRainhas> query = apiario_ApiFcunCriaRainhasQuery.forCurrentThread();
        query.setParameter(0, apiarioFecunda);
        return query.list();
    }

    /** Internal query to resolve the "apiFinalCriaRainhas" to-many relationship of Apiario. */
    public List<CriaRainhas> _queryApiario_ApiFinalCriaRainhas(long Ap_final) {
        synchronized (this) {
            if (apiario_ApiFinalCriaRainhasQuery == null) {
                QueryBuilder<CriaRainhas> queryBuilder = queryBuilder();
                queryBuilder.where(Properties.Ap_final.eq(null));
                apiario_ApiFinalCriaRainhasQuery = queryBuilder.build();
            }
        }
        Query<CriaRainhas> query = apiario_ApiFinalCriaRainhasQuery.forCurrentThread();
        query.setParameter(0, Ap_final);
        return query.list();
    }

    /** Internal query to resolve the "metodoCriaCriaRainhas" to-many relationship of MetodosCriacao. */
    public List<CriaRainhas> _queryMetodosCriacao_MetodoCriaCriaRainhas(long metodCria) {
        synchronized (this) {
            if (metodosCriacao_MetodoCriaCriaRainhasQuery == null) {
                QueryBuilder<CriaRainhas> queryBuilder = queryBuilder();
                queryBuilder.where(Properties.MetodCria.eq(null));
                metodosCriacao_MetodoCriaCriaRainhasQuery = queryBuilder.build();
            }
        }
        Query<CriaRainhas> query = metodosCriacao_MetodoCriaCriaRainhasQuery.forCurrentThread();
        query.setParameter(0, metodCria);
        return query.list();
    }

    /** Internal query to resolve the "racaCriaRainhas" to-many relationship of Racas. */
    public List<CriaRainhas> _queryRacas_RacaCriaRainhas(long racaRainha) {
        synchronized (this) {
            if (racas_RacaCriaRainhasQuery == null) {
                QueryBuilder<CriaRainhas> queryBuilder = queryBuilder();
                queryBuilder.where(Properties.RacaRainha.eq(null));
                racas_RacaCriaRainhasQuery = queryBuilder.build();
            }
        }
        Query<CriaRainhas> query = racas_RacaCriaRainhasQuery.forCurrentThread();
        query.setParameter(0, racaRainha);
        return query.list();
    }

    /** Internal query to resolve the "apicultorCriaRainhas" to-many relationship of Apicultor. */
    public List<CriaRainhas> _queryApicultor_ApicultorCriaRainhas(long codApicultor) {
        synchronized (this) {
            if (apicultor_ApicultorCriaRainhasQuery == null) {
                QueryBuilder<CriaRainhas> queryBuilder = queryBuilder();
                queryBuilder.where(Properties.CodApicultor.eq(null));
                apicultor_ApicultorCriaRainhasQuery = queryBuilder.build();
            }
        }
        Query<CriaRainhas> query = apicultor_ApicultorCriaRainhasQuery.forCurrentThread();
        query.setParameter(0, codApicultor);
        return query.list();
    }

    /** Internal query to resolve the "exameDadorCriaRainhas" to-many relationship of Apiario. */
    public List<CriaRainhas> _queryApiario_ExameDadorCriaRainhas(long ColmeiaDadora) {
        synchronized (this) {
            if (apiario_ExameDadorCriaRainhasQuery == null) {
                QueryBuilder<CriaRainhas> queryBuilder = queryBuilder();
                queryBuilder.where(Properties.ColmeiaDadora.eq(null));
                apiario_ExameDadorCriaRainhasQuery = queryBuilder.build();
            }
        }
        Query<CriaRainhas> query = apiario_ExameDadorCriaRainhasQuery.forCurrentThread();
        query.setParameter(0, ColmeiaDadora);
        return query.list();
    }

    /** Internal query to resolve the "exameIniCriaRainhas" to-many relationship of Exame. */
    public List<CriaRainhas> _queryExame_ExameIniCriaRainhas(long colmeiaInicializ) {
        synchronized (this) {
            if (exame_ExameIniCriaRainhasQuery == null) {
                QueryBuilder<CriaRainhas> queryBuilder = queryBuilder();
                queryBuilder.where(Properties.ColmeiaInicializ.eq(null));
                exame_ExameIniCriaRainhasQuery = queryBuilder.build();
            }
        }
        Query<CriaRainhas> query = exame_ExameIniCriaRainhasQuery.forCurrentThread();
        query.setParameter(0, colmeiaInicializ);
        return query.list();
    }

    /** Internal query to resolve the "exameFinaCriaRainhas" to-many relationship of Exame. */
    public List<CriaRainhas> _queryExame_ExameFinaCriaRainhas(long colmeiaFinaliz) {
        synchronized (this) {
            if (exame_ExameFinaCriaRainhasQuery == null) {
                QueryBuilder<CriaRainhas> queryBuilder = queryBuilder();
                queryBuilder.where(Properties.ColmeiaFinaliz.eq(null));
                exame_ExameFinaCriaRainhasQuery = queryBuilder.build();
            }
        }
        Query<CriaRainhas> query = exame_ExameFinaCriaRainhasQuery.forCurrentThread();
        query.setParameter(0, colmeiaFinaliz);
        return query.list();
    }

    /** Internal query to resolve the "exameFcunCriaRainhas" to-many relationship of Exame. */
    public List<CriaRainhas> _queryExame_ExameFcunCriaRainhas(long colmeiaFecunda) {
        synchronized (this) {
            if (exame_ExameFcunCriaRainhasQuery == null) {
                QueryBuilder<CriaRainhas> queryBuilder = queryBuilder();
                queryBuilder.where(Properties.ColmeiaFecunda.eq(null));
                exame_ExameFcunCriaRainhasQuery = queryBuilder.build();
            }
        }
        Query<CriaRainhas> query = exame_ExameFcunCriaRainhasQuery.forCurrentThread();
        query.setParameter(0, colmeiaFecunda);
        return query.list();
    }

    /** Internal query to resolve the "exameFinalCriaRainhas" to-many relationship of Exame. */
    public List<CriaRainhas> _queryExame_ExameFinalCriaRainhas(long ColmeiaFinal) {
        synchronized (this) {
            if (exame_ExameFinalCriaRainhasQuery == null) {
                QueryBuilder<CriaRainhas> queryBuilder = queryBuilder();
                queryBuilder.where(Properties.ColmeiaFinal.eq(null));
                exame_ExameFinalCriaRainhasQuery = queryBuilder.build();
            }
        }
        Query<CriaRainhas> query = exame_ExameFinalCriaRainhasQuery.forCurrentThread();
        query.setParameter(0, ColmeiaFinal);
        return query.list();
    }

    private String selectDeep;

    protected String getSelectDeep() {
        if (selectDeep == null) {
            StringBuilder builder = new StringBuilder("SELECT ");
            SqlUtils.appendColumns(builder, "T", getAllColumns());
            builder.append(',');
            SqlUtils.appendColumns(builder, "T0", daoSession.getApiarioDao().getAllColumns());
            builder.append(',');
            SqlUtils.appendColumns(builder, "T1", daoSession.getMetodosCriacaoDao().getAllColumns());
            builder.append(',');
            SqlUtils.appendColumns(builder, "T2", daoSession.getRacasDao().getAllColumns());
            builder.append(',');
            SqlUtils.appendColumns(builder, "T3", daoSession.getApicultorDao().getAllColumns());
            builder.append(',');
            SqlUtils.appendColumns(builder, "T4", daoSession.getExameDao().getAllColumns());
            builder.append(" FROM CRIA_RAINHAS T");
            builder.append(" LEFT JOIN APIARIO T0 ON T.'APIARIO_DADOR'=T0.'_idApiario'");
            builder.append(" LEFT JOIN METODOS_CRIACAO T1 ON T.'METODO_CRIA_ID'=T1.'_idMetCria'");
            builder.append(" LEFT JOIN RACAS T2 ON T.'RACA_RAINHA'=T2.'_idRaca'");
            builder.append(" LEFT JOIN APICULTOR T3 ON T.'APICULTOR_ID'=T3.'_idApicultor'");
            builder.append(" LEFT JOIN EXAME T4 ON T.'COLMEIA_DADORA'=T4.'_idExame'");
            builder.append(' ');
            selectDeep = builder.toString();
        }
        return selectDeep;
    }
    
    protected CriaRainhas loadCurrentDeep(Cursor cursor, boolean lock) {
        CriaRainhas entity = loadCurrent(cursor, 0, lock);
        int offset = getAllColumns().length;

        Apiario apiario = loadCurrentOther(daoSession.getApiarioDao(), cursor, offset);
         if(apiario != null) {
            entity.setApiario(apiario);
        }
        offset += daoSession.getApiarioDao().getAllColumns().length;

        MetodosCriacao metodosCriacao = loadCurrentOther(daoSession.getMetodosCriacaoDao(), cursor, offset);
         if(metodosCriacao != null) {
            entity.setMetodosCriacao(metodosCriacao);
        }
        offset += daoSession.getMetodosCriacaoDao().getAllColumns().length;

        Racas racas = loadCurrentOther(daoSession.getRacasDao(), cursor, offset);
         if(racas != null) {
            entity.setRacas(racas);
        }
        offset += daoSession.getRacasDao().getAllColumns().length;

        Apicultor apicultor = loadCurrentOther(daoSession.getApicultorDao(), cursor, offset);
         if(apicultor != null) {
            entity.setApicultor(apicultor);
        }
        offset += daoSession.getApicultorDao().getAllColumns().length;

        Exame exame = loadCurrentOther(daoSession.getExameDao(), cursor, offset);
         if(exame != null) {
            entity.setExame(exame);
        }

        return entity;    
    }

    public CriaRainhas loadDeep(Long key) {
        assertSinglePk();
        if (key == null) {
            return null;
        }

        StringBuilder builder = new StringBuilder(getSelectDeep());
        builder.append("WHERE ");
        SqlUtils.appendColumnsEqValue(builder, "T", getPkColumns());
        String sql = builder.toString();
        
        String[] keyArray = new String[] { key.toString() };
        Cursor cursor = db.rawQuery(sql, keyArray);
        
        try {
            boolean available = cursor.moveToFirst();
            if (!available) {
                return null;
            } else if (!cursor.isLast()) {
                throw new IllegalStateException("Expected unique result, but count was " + cursor.getCount());
            }
            return loadCurrentDeep(cursor, true);
        } finally {
            cursor.close();
        }
    }
    
    /** Reads all available rows from the given cursor and returns a list of new ImageTO objects. */
    public List<CriaRainhas> loadAllDeepFromCursor(Cursor cursor) {
        int count = cursor.getCount();
        List<CriaRainhas> list = new ArrayList<CriaRainhas>(count);
        
        if (cursor.moveToFirst()) {
            if (identityScope != null) {
                identityScope.lock();
                identityScope.reserveRoom(count);
            }
            try {
                do {
                    list.add(loadCurrentDeep(cursor, false));
                } while (cursor.moveToNext());
            } finally {
                if (identityScope != null) {
                    identityScope.unlock();
                }
            }
        }
        return list;
    }
    
    protected List<CriaRainhas> loadDeepAllAndCloseCursor(Cursor cursor) {
        try {
            return loadAllDeepFromCursor(cursor);
        } finally {
            cursor.close();
        }
    }
    

    /** A raw-style query where you can pass any WHERE clause and arguments. */
    public List<CriaRainhas> queryDeep(String where, String... selectionArg) {
        Cursor cursor = db.rawQuery(getSelectDeep() + where, selectionArg);
        return loadDeepAllAndCloseCursor(cursor);
    }
 
}
